feat: expose cljs lipsync timing debug#21
Conversation
Architecture follow-up: CLJS lip-sync timing debug and Vocal activation dataThis PR is a CLJS speech-timing hardening step. It does not replace every legacy TypeScript lip-sync surface yet, but it adds the debug contract we need to prove that provider visemes are being normalized and played through the CLJS Vocal timeline path correctly. What is written in CLJS here
Why this matters architecturallyThe target architecture is that visible speech animation should route through the CLJS Vocal sentence timeline, while provider-specific lip-sync mapping remains a pure data planner step. This PR gives us the observability needed to tell whether a bad mouth shape is caused by provider timing, canonical mapping, coarticulation, jaw contribution, or host playback anchoring. This is especially important for Azure and LiveKit speech paths, because audio transport and viseme timing arrive differently, but both should normalize into the same CLJS What this does not solve yetThis PR does not remove the old TypeScript lip-sync service or make the package default entry CLJS-backed. It also does not create the final Most/Effect stream runtime. The debug data is currently emitted through CLJS output maps and host callbacks. The next architecture layer should expose those same outputs as durable runtime streams. Validation added
|
Summary
Validation
Refs #10
Refs #11
Refs #15